package com.stefanini.pe.bbva.bp.in.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.stefanini.pe.bbva.bp.in.to.Cliente;
import com.stefanini.pe.bbva.bp.in.to.Ejecutivo;
import com.stefanini.pe.bbva.bp.in.to.UsuarioSesion;

public class LoginModel {
	private List listaTipoEjecutivos;
	private String codTipoEjecutivo;
	private String m_strTxtUsuario_Text;
	private boolean mostrarListaEjecutivos;
	private String treeEjecutivos;
	private String treeEjecutivosRadio;
    private List<Ejecutivo> listaEjecutivos;
    private List<HashMap> listaEjecutivosTotal;
	private List<Ejecutivo> listaEjecutivosRadio;
    private String idsEjecutivos; 
    private String idSuperior;
    private String idEjecutivoRadio;
    private String nombreEjecutivo;
    private String fechaInformacion;
    private String fecha;
    private UsuarioSesion usuarioSesion;
	private Cliente cliente;
	
	public LoginModel(){
		m_strTxtUsuario_Text = "";
		usuarioSesion = null;
		reset();
	}
	
	public void reset(){
		listaTipoEjecutivos=new ArrayList();
		listaEjecutivos = new ArrayList<Ejecutivo>();
		listaEjecutivosTotal = new ArrayList<HashMap>();
		listaEjecutivosRadio = new ArrayList<Ejecutivo>();
	}

	public void recargarJerarquia(String codigos) {
		setIdsEjecutivos(codigos);
		String[] ids = this.getIdsEjecutivos().split("\\,");
		
		for(int index = 0 ; index < this.getListaEjecutivos().size(); index++){
			this.getListaEjecutivos().get(index).procesarSeleccion(ids);
		}

		StringBuffer sbHtml = new StringBuffer();
		sbHtml.append("<ul id=\"arbol\"  style=\"width: 90%;height: 240px;overflow-y: scroll;\"   >");
		for(int index = 0; index < this.getListaEjecutivos().size(); index++){
			sbHtml.append(this.getListaEjecutivos().get(index).getHtml());
		}
		sbHtml.append("</ul>");
		
		this.setTreeEjecutivos(sbHtml.toString());
	}
	
	public void recargarJerarquiaRadio(String codigo){
		this.setIdEjecutivoRadio(codigo);
		
		String[] ids = new String[]{codigo};
		
		for(int index = 0 ; index < this.getListaEjecutivosRadio().size(); index++){
			this.getListaEjecutivosRadio().get(index).procesarSeleccion(ids);
		}
		
		StringBuffer sbHtmlRadio = new StringBuffer();
		sbHtmlRadio.append("<ul id=\"arbol\">");
		for(int index = 0; index < this.getListaEjecutivosRadio().size(); index++){
			sbHtmlRadio.append(this.getListaEjecutivosRadio().get(index).getRadio());
		}
		sbHtmlRadio.append("</ul>");
		
		this.setTreeEjecutivosRadio(sbHtmlRadio.toString());
	}
	
	public void cargarJerarquia(List listaJerarquia){
		cargarJerarquiaInicial(listaJerarquia);
		
		StringBuffer sbHtml = new StringBuffer();
		sbHtml.append("<ul id=\"arbol\"  style=\"width: 90%;height: 240px;overflow-y: scroll;\"   >");
		for(int index = 0; index < this.getListaEjecutivos().size(); index++){
			sbHtml.append(this.getListaEjecutivos().get(index).getHtml());
		}
		sbHtml.append("</ul>");
		
		this.setTreeEjecutivos(sbHtml.toString());
		
		// ----------------------
		cargarJerarquiaInicialRadio(listaJerarquia);
		
		StringBuffer sbHtmlRadio = new StringBuffer();
		sbHtmlRadio.append("<ul id=\"arbolr\">");
		for(int index = 0; index < this.getListaEjecutivosRadio().size(); index++){
			sbHtmlRadio.append(this.getListaEjecutivosRadio().get(index).getRadio());
		}
		sbHtmlRadio.append("</ul>");
		
		this.setTreeEjecutivosRadio(sbHtmlRadio.toString());
	}
	
	private void cargarJerarquiaInicial(List listaJerarquia){
		this.listaEjecutivos = new ArrayList<Ejecutivo>();
		HashMap objJerarquiaPadre = (HashMap)listaJerarquia.get(0);
		this.setIdSuperior(objJerarquiaPadre.get("idusuarioasesor").toString());
		
		for(int index = 0 ; index < listaJerarquia.size(); index++){
			HashMap objJerarquia = (HashMap)listaJerarquia.get(index);
			
			String idAsesorPadre = "0";
			if ( objJerarquia.get("idusuarioasesorpadre") != null){
				idAsesorPadre = objJerarquia.get("idusuarioasesorpadre").toString();	
			}
			
			int nivel = Integer.parseInt(objJerarquia.get("nivel").toString());
			
			if(nivel > 3){
				continue;
			}
			
			if(idAsesorPadre.equals("0")){
				Ejecutivo eje = new Ejecutivo();
				eje.setCodigo(objJerarquia.get("idusuarioasesor").toString());
				eje.setDescripcion(objJerarquia.get("nombreejecutivo").toString());
				eje.setNumero(objJerarquia.get("nroclientes").toString());
				eje.setNivel(objJerarquia.get("desnivel").toString());
				
				if (objJerarquia.get("idusuarioasesor").toString().equals(this.getIdSuperior())){
					eje.setSeleccionado(true);
				}
				else{
					eje.setSeleccionado(false);	
				}
				this.listaEjecutivos.add(eje);
				cargarJerarquiaInicial(eje, listaJerarquia);
			}
		}
	}
	
	private void cargarJerarquiaInicial(Ejecutivo objPadre, List listaJerarquia){
		List<Ejecutivo> ejecutivos = new ArrayList<Ejecutivo>();
		StringBuffer sbCodigos = new StringBuffer();
		this.setIdsEjecutivos(sbCodigos.toString());
		
		for(int index = 1 ; index < listaJerarquia.size(); index++){
			HashMap objJerarquia = (HashMap)listaJerarquia.get(index);
			String idAsesorPadre = objJerarquia.get("idusuarioasesorpadre").toString();
			int nivel = Integer.parseInt(objJerarquia.get("nivel").toString());
			
			if(nivel > 3){
				continue;
			}
			
			if(idAsesorPadre.equals(objPadre.getCodigo())){
				Ejecutivo eje = new Ejecutivo();
				eje.setCodigo(objJerarquia.get("idusuarioasesor").toString());
				eje.setDescripcion(objJerarquia.get("nombreejecutivo").toString());
				eje.setNumero(objJerarquia.get("nroclientes").toString());
				eje.setNivel(objJerarquia.get("desnivel").toString());
				
				if (objJerarquia.get("idusuarioasesor").toString().equals(this.getIdSuperior())){
					eje.setSeleccionado(true);
				}
				else{
					eje.setSeleccionado(false);	
				}
				
				ejecutivos.add(eje);
				cargarJerarquiaInicial(eje, listaJerarquia);
			}
		}
		
		objPadre.setHijos(ejecutivos);			
	}
	
	private void cargarJerarquiaInicialRadio(Ejecutivo objPadre, List listaJerarquia) {			
		List<Ejecutivo> ejecutivos = new ArrayList<Ejecutivo>();
	
		for(int index = 1 ; index < listaJerarquia.size(); index++){
			HashMap objJerarquia = (HashMap)listaJerarquia.get(index);
			String idAsesorPadre = objJerarquia.get("idusuarioasesorpadre").toString();
			int nivel = Integer.parseInt(objJerarquia.get("nivel").toString());
			
			if(nivel > 3){
				continue;
			}
			
			if(idAsesorPadre.equals(objPadre.getCodigo())){
				Ejecutivo eje = new Ejecutivo();
				eje.setCodigo(objJerarquia.get("idusuarioasesor").toString());
				eje.setDescripcion(objJerarquia.get("nombreejecutivo").toString());
				eje.setNumero(objJerarquia.get("nroclientes").toString());
				eje.setNivel(objJerarquia.get("desnivel").toString());
				eje.setSeleccionado(false);
				ejecutivos.add(eje);
				cargarJerarquiaInicialRadio(eje, listaJerarquia);
			}
		}
		
		objPadre.setHijos(ejecutivos);
	}
	
	private void cargarJerarquiaInicialRadio(List listaJerarquia) {
		this.listaEjecutivosRadio = new ArrayList<Ejecutivo>();
		
		HashMap objJerarquiaPadre = (HashMap)listaJerarquia.get(0);
		this.setIdSuperior(objJerarquiaPadre.get("idusuarioasesor").toString());
		this.setIdEjecutivoRadio(this.getIdSuperior());
		
		Ejecutivo ejeS = new Ejecutivo();
		ejeS.setCodigo(objJerarquiaPadre.get("idusuarioasesor").toString());
		ejeS.setDescripcion(objJerarquiaPadre.get("nombreejecutivo").toString());
		ejeS.setNumero(objJerarquiaPadre.get("nroclientes").toString());
		ejeS.setNivel(objJerarquiaPadre.get("desnivel").toString());
		ejeS.setSeleccionado(true);
		this.listaEjecutivosRadio.add(ejeS);
		
		List<Ejecutivo> ejecutivos = new ArrayList<Ejecutivo>();
		
		for(int index = 1 ; index < listaJerarquia.size(); index++){
			HashMap objJerarquia = (HashMap)listaJerarquia.get(index);
			String idAsesorPadre = objJerarquia.get("idusuarioasesorpadre").toString();
			int nivel = Integer.parseInt(objJerarquia.get("nivel").toString());
			
			if(nivel > 3){
				continue;
			}
			
			if(idAsesorPadre.equals(this.getIdSuperior())){
				Ejecutivo eje = new Ejecutivo();
				eje.setCodigo(objJerarquia.get("idusuarioasesor").toString());
				eje.setDescripcion(objJerarquia.get("nombreejecutivo").toString());
				eje.setNumero(objJerarquia.get("nroclientes").toString());
				eje.setNivel(objJerarquia.get("desnivel").toString());
				eje.setSeleccionado(false);
				ejecutivos.add(eje);
				cargarJerarquiaInicialRadio(eje, listaJerarquia);
			}
		}
	
		ejeS.setHijos(ejecutivos);
	}

	public void setMostrarListaEjecutivos(boolean mostrarListaEjecutivos) {
		if(mostrarListaEjecutivos){
			try{
				if(usuarioSesion.getIndJerarquia().equalsIgnoreCase("S")){
					this.mostrarListaEjecutivos = mostrarListaEjecutivos;
				}else{
					this.mostrarListaEjecutivos = false;
				}
			}catch(Exception e){
				this.mostrarListaEjecutivos = false;
			}
		}else{
			this.mostrarListaEjecutivos = mostrarListaEjecutivos;
		}
	}
	
	public String obtenerEjecutivos(){
		if(this.getIdsEjecutivos() == null || this.getIdsEjecutivos().equals("")){	
			if(this.getIdSuperior()==null){
				return getUsuarioSesion().getIdUsuarioAsesor()+"";
			}
			return this.getIdSuperior();		
		}else
			return this.getIdSuperior() + "," + this.getIdsEjecutivos();
	}
	
	public List getListaTipoEjecutivos() {
		return listaTipoEjecutivos;
	}

	public void setListaTipoEjecutivos(List listaTipoEjecutivos) {
		this.listaTipoEjecutivos = listaTipoEjecutivos;
	}

	public String getCodTipoEjecutivo() {
		return codTipoEjecutivo;
	}

	public void setCodTipoEjecutivo(String codTipoEjecutivo) {
		this.codTipoEjecutivo = codTipoEjecutivo;
	}

	public String getM_strTxtUsuario_Text() {
		return m_strTxtUsuario_Text;
	}

	public void setM_strTxtUsuario_Text(String txtUsuario_Text) {
		m_strTxtUsuario_Text = txtUsuario_Text;
	}
	
	public boolean getMostrarListaEjecutivos() {
		return mostrarListaEjecutivos;
	}
		
	public String getTreeEjecutivos() {
		return treeEjecutivos;
	}

	public void setTreeEjecutivos(String treeEjecutivos) {
		this.treeEjecutivos = treeEjecutivos;
	}
	
	public List<Ejecutivo> getListaEjecutivos() {
		return listaEjecutivos;
	}

	public void setListaEjecutivos(List<Ejecutivo> listaEjecutivos) {
		this.listaEjecutivos = listaEjecutivos;
	}
	
	public String getIdsEjecutivos() {
		return idsEjecutivos;
	}

	public void setIdsEjecutivos(String idsEjecutivos) {
		this.idsEjecutivos = idsEjecutivos;
	}
	
	public String getIdSuperior() {
		return idSuperior;
	}

	public void setIdSuperior(String idSuperior) {
		this.idSuperior = idSuperior;
	}
		
	public List<Ejecutivo> getListaEjecutivosRadio() {
		return listaEjecutivosRadio;
	}

	public void setListaEjecutivosRadio(List<Ejecutivo> listaEjecutivosRadio) {
		this.listaEjecutivosRadio = listaEjecutivosRadio;
	}

	public String getIdEjecutivoRadio() {
		return idEjecutivoRadio;
	}

	public void setIdEjecutivoRadio(String idEjecutivoRadio) {
		this.idEjecutivoRadio = idEjecutivoRadio;
	}
	
    public String getTreeEjecutivosRadio() {
		return treeEjecutivosRadio;
	}

	public void setTreeEjecutivosRadio(String treeEjecutivosRadio) {
		this.treeEjecutivosRadio = treeEjecutivosRadio;
	}

	public List<HashMap> getListaEjecutivosTotal() {
		return listaEjecutivosTotal;
	}

	public void setListaEjecutivosTotal(List<HashMap> listaEjecutivosTotal) {
		this.listaEjecutivosTotal = listaEjecutivosTotal;
	}

	public String getFecha() {
		return fecha;
	}

	public void setFecha(String fecha) {
		this.fecha = fecha;
	}

	public String getFechaInformacion() {
		return fechaInformacion;
	}

	public void setFechaInformacion(String fechaInformacion) {
		this.fechaInformacion = fechaInformacion;
	}

	public String getNombreEjecutivo() {
		return nombreEjecutivo;
	}

	public void setNombreEjecutivo(String nombreEjecutivo) {
		this.nombreEjecutivo = nombreEjecutivo;
	}

	public UsuarioSesion getUsuarioSesion() {
		return usuarioSesion;
	}

	public void setUsuarioSesion(UsuarioSesion usuarioSesion) {
		this.usuarioSesion = usuarioSesion;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
}
